package com.wuwei.elearning.question.service;

import com.wuwei.elearning.question.domain.Grade;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wuwei.elearning.setting.domain.User;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 班级表,一个班级有很多学员和一个班主任 服务类
 * </p>
 *
 * @author wuwei
 * @since 2024-08-12
 */
public interface GradeService extends IService<Grade> {

    /**
     * 添加一个班级
     * @param gradeName 班级名称
     * @param students 班级学生的清单，user表中status为2的用户id集合
     * @param account 创建班级的人的账号
     * @param type 班级类型，0为基础执照班，1为机型班，现在先只设这两个
     * @param teacher 班主任的，user表中status为1的用户id
     */
    void add(String gradeName, List<Long> students, Long account, Integer type, Long teacher);

    /**
     * 更新一个班级
     * @param id grade表的主键
     * @param gradeName 班级名称
     * @param students 班级学生的清单，user表中status为2的用户id集合
     * @param account 创建班级的人的账号
     * @param type 班级类型，0为基础执照班，1为机型班，现在先只设这两个
     * @param teacher 班主任的，user表中status为1的用户id
     */
    void myUpdate(Long id, String gradeName, List<Long> students, Long account, Integer type, Long teacher);

    /**
     * 删除班级信息的方法
     * 1.删除班级信息grade表
     * 2.删除和班级关联的试卷questionItem表
     * 3.删除和questionItem关联的question_item_raletion_question
     * 4.删除和questionItem表的id关联的test_result表
     * 5.删除和questionItem表的id关联的test_answers表
     * @param id
     */
    void myRemove(Long id);

    /**
     * 统计学员各科的平均分
     * @param subjectId
     * @param gradeId
     * @return
     */
    Map<String, Object> getStatictics(Long subjectId, Long gradeId);

    int getUserRank(User user);

    /**
     * 查找某学员的某科成绩分数变化情况
     * @param subjectId
     * @param gradeId
     * @param userId
     * @return
     */
    Map<String, Object> showDetail(Long subjectId, Long gradeId, Long account);
}
